www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第7章 无约束多维极值问题/minTruA.m

    function [x,minf] = minTruA(f,x0,r0,mu,yita,var,eps)
%目标函数:f;
%初始点:x0;
%自变量向量:var;
%精度:eps;
%目标函数取最小值时的自变量值:x;
%目标函数的最小值:minf

if nargin == 6
    eps = 1.0e-6;
end
tol = 1;
x0 = transpose(x0);
r = r0;

while tol>eps
    gradf = jacobian(f,var);
    jacf = jacobian(gradf,var);
    fx = Funval(f,var,x0);
    v  = Funval(gradf,var,x0);
    pv = Funval(jacf,var,x0);
    tol = norm(v);
    
    H = double(pv);
    c = transpose(v);
    lb = -r*ones(length(var),1);
    ub = r*ones(length(var),1);
    [y,fy]= quadprog(H,c,[],[],[],[],lb,ub);
    
    fx_n = Funval(gradf,var,x0+y);
    p = (fx - fx_n)/(-fy);
    if p<= mu
        r = 0.5*r;
    else
        x0 = x0 + y;
        if p >= yita
            r = 2*r;
        end
    end
end

x = x0;
minf = Funval(f,var,x);
format short;